Spring JDBC-তে Stored Procedures ব্যবহার করার মাধ্যমে আপনি ডেটাবেসে সংরক্ষিত পদ্ধতিগুলি (যা ডেটাবেস সার্ভারে সংরক্ষিত থাকে) কল করতে পারেন। এটি বিশেষত যখন ডেটাবেসের মধ্যে জটিল লজিক বা কোড থাকে এবং আপনি সেই লজিকগুলো অ্যাপ্লিকেশন লেভেলে না লিখে সরাসরি ডেটাবেস থেকে ব্যবহার করতে চান, তখন কার্যকর।
Spring JDBC-তে Stored Procedure কল করার জন্য JdbcTemplate
বা SimpleJdbcCall
ব্যবহার করা হয়। এখানে আমরা SimpleJdbcCall
এর মাধ্যমে Stored Procedure ব্যবহার করার উদাহরণ দেখব।
application.properties
ফাইলে ডেটাবেস কনফিগারেশনপ্রথমে, application.properties
ফাইলে ডেটাবেস কনফিগারেশন করতে হবে:
# DataSource Configuration
spring.datasource.url=jdbc:mysql://localhost:3306/your_database
spring.datasource.username=root
spring.datasource.password=root_password
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
ধরা যাক, আমরা একটি Stored Procedure তৈরি করতে যাচ্ছি যা একটি কর্মীর তথ্য খুঁজে বের করবে তার আইডি দিয়ে। MySQL এ উদাহরণ:
DELIMITER
DELIMITER ;
এই Stored Procedure এর মাধ্যমে employee
টেবিল থেকে নির্দিষ্ট id
এর কর্মীর বিস্তারিত তথ্য পাওয়া যাবে।
Spring JDBC-তে Stored Procedure কল করার জন্য SimpleJdbcCall
ব্যবহার করা হয়, যা ডেটাবেসের Stored Procedure কল করার প্রক্রিয়াকে সরল করে দেয়।
import org.springframework.jdbc.core.SimpleJdbcCall;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
import org.springframework.stereotype.Repository;
import javax.sql.DataSource;
import java.util.Map;
@Repository
public class EmployeeRepository {
private SimpleJdbcCall simpleJdbcCall;
// Constructor injection for DataSource
public EmployeeRepository(DataSource dataSource) {
this.simpleJdbcCall = new SimpleJdbcCall(dataSource)
.withProcedureName("getEmployeeDetails"); // Stored Procedure Name
}
public Map<String, Object> getEmployeeDetails(int empId) {
// Create input parameter map
Map<String, Object> inParams = Map.of("empId", empId);
// Execute stored procedure and get the result
Map<String, Object> result = simpleJdbcCall.execute(inParams);
return result;
}
}
এখন EmployeeService
ক্লাসে getEmployeeDetails
মেথডটি কল করুন:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Map;
@Service
public class EmployeeService {
private final EmployeeRepository employeeRepository;
@Autowired
public EmployeeService(EmployeeRepository employeeRepository) {
this.employeeRepository = employeeRepository;
}
public Map<String, Object> getEmployeeDetails(int empId) {
return employeeRepository.getEmployeeDetails(empId);
}
}
Spring MVC Controller তৈরি করে ওয়েব রেসপন্স এ getEmployeeDetails
মেথড কল করতে পারেন:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.Map;
@RestController
public class EmployeeController {
private final EmployeeService employeeService;
@Autowired
public EmployeeController(EmployeeService employeeService) {
this.employeeService = employeeService;
}
@GetMapping("/employee/details")
public Map<String, Object> getEmployeeDetails(@RequestParam int empId) {
return employeeService.getEmployeeDetails(empId);
}
}
এখন, আপনি GET /employee/details?empId=1
কল করে কর্মীর বিস্তারিত তথ্য পেতে পারবেন।
এখন আপনি Spring Boot অ্যাপ্লিকেশনটি রান করতে পারেন এবং GET /employee/details?empId=1
এ গিয়ে Stored Procedure এর মাধ্যমে কর্মীর তথ্য পেতে পারবেন।
SimpleJdbcCall
তাতে ব্যবহৃত মানগুলিকে হ্যান্ডল করতে পারে। এই জন্য declareParameters
বা returningResultSet
মেথড ব্যবহার করা হয়।আউটপুট প্যারামিটার হ্যান্ডলিং: আউটপুট প্যারামিটার নিতে হলে SimpleJdbcCall
এ আউটপুট প্যারামিটার ঘোষণা করতে হয়।
উদাহরণ:
simpleJdbcCall = new SimpleJdbcCall(dataSource)
.withProcedureName("getEmployeeDetails")
.declareParameters(new SqlOutParameter("outParam", Types.VARCHAR));
স্টোরড প্রোসিডিউরের ইনপুট আর্গুমেন্ট: যখন আপনার স্টোরড প্রোসিডিউরে ইনপুট আর্গুমেন্ট থাকে, তখন আপনি সেগুলিকে Map
এর মাধ্যমে পাস করেন, যেমন:
Map<String, Object> inParams = Map.of("empId", empId);
Spring JDBC এর মাধ্যমে Stored Procedure ব্যবহারে আপনি ডেটাবেসের মধ্যে সংরক্ষিত লজিক সহজভাবে কল করতে পারেন, যা আপনার অ্যাপ্লিকেশনকে আরও কার্যকর এবং স্কেলেবল করে তোলে।
Read more